package chapter7;

import java.util.Scanner;

/**
 * 不用任何比较判断找出两个数的较大的数
 * 32位整数
 */
public class GetMax {
    //通过a-b的符号判断,应该先判断ab是否同号
    public static int getMax1(int a, int b) {
        int c = a - b;// 可能溢出
        int scA = sign(c);
        int scB = flip(scA);
        return a * scA + b * scB;
    }

    public static int getMax(int a, int b) {
        int c = a - b;
        int sa = sign(a);
        int sb = sign(b);
        int sc = sign(c);
        int difSab = sa ^ sb; // 不同号为1
        int sameSab = flip(difSab); // 同号为1
        int returnA = sameSab * sc + difSab * sa;// 同号根据a-b决定，不同号a大返回a
        int returnB = flip(returnA);
        return returnA * a + returnB * b;
    }


    // 1->0, 0->1
    private static int flip(int n) {
        return n ^ 1;
    }

    // 最高位&1，1&1=1->0, 0&1=0->1
    private static int sign(int n) {
        return flip((n >> 31) & 1);
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            System.out.println(getMax(a,b));
            System.out.print(Integer.MAX_VALUE + " " + Integer.MIN_VALUE + "\n"
                    + getMax(Integer.MAX_VALUE,Integer.MIN_VALUE));
        }
    }
}
